package cn.control;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.entity.Cart;
import cn.entity.CarItem;
import cn.entity.User;

/**
 * Servlet implementation class Controller
 */
public class Controll extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Controll() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 设置编码
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		// 获取打印流
		PrintWriter out = response.getWriter();
		String action = request.getParameter("action");

		if ("add".equals(action)) {
			/**
			 * 购买时可以将一个购物车项添加到购物车
			 */
			// 获取货品名称
			String product = request.getParameter("product");

			Integer number = null; // 数量
			try {
				// 接收到的是一个String，将其转换为Integer，如果转换失败，则向页面输出提示信息
				number = Integer.parseInt(request.getParameter("number"));
			} catch (NumberFormatException e) {
				out.println("数量非法，<a href='/buy.html'>重新填写</a><br/>");
				return;
				// e.printStackTrace();
			}

			// 通过JSESSIONID,获取session对象，如果没有获取到，则新创建一个session对象
			HttpSession session = request.getSession();
			// 在session中获取user属性的对象
			User user = (User) session.getAttribute("user");
			// 在session中获取car属性的对象
			Cart car = (Cart) session.getAttribute("car");

			// 只有当用户已登录，且货品和数量不为空时，才允许添加项到购物车
			if (user != null && product != null && number != null) {

				CarItem carItem = new CarItem(); // 创建购物车项
				// UUID.randomUUID().toString()，一个随机且不重复的字符串，方便购物车项的查询
				carItem.setId(UUID.randomUUID().toString());
				carItem.setProduct(product);
				carItem.setNumber(number);

				// 如果购物车为空，则创建一个购物车，并添加到Session
				if (car == null) {
					car = new Cart();
					session.setAttribute("car", car);
				}

				car.add(carItem);

				out.println("购买成功<br/>");
				out.println("<a href='/buy.html'>继续购买</a><br/>");
				out.println("<a href='/list'>管理列表</a><br/>");
			} else {
				out.println("<a href='/login.html'>请登录</a><br/>");
			}
		} else if ("delete".equals(action)) {
			/**
			 * 删除购物加中的购物车项
			 */
			// 获取session，如果使用JSESSIONID没有找到则创建一个
			HttpSession session = request.getSession();
			// 获取session中属性名为user的对象
			User user = (User) session.getAttribute("user");
			// 获取session中属性名为car的对象
			Cart car = (Cart) session.getAttribute("car");

			// 接收需要删除的购物车项的id
			String id = request.getParameter("id");

			// 如果用户已登录，则向下执行，否则向页面输出提示信息
			if (user != null) {
				// 当car对象存在时，才从此购物车中删除购物车项，且转入的id也不为空
				if (car != null && id != null && !"".equals(id)) {
					car.remove(id);

					out.println("删除成功<br/>");
					out.println("<a href='/buy.html'>继续购买</a><br/>");
					out.println("<a href='/list'>管理列表</a><br/>");
				} else {
					out.println("也还没车车...");
				}
			} else {
				out.println("还没登录，禁止操作。<a href='/login.html'>返回登录</a>");
			}
		} else if ("list".equals(action)) {
			/**
			 * 用于显示购物车里面的内容
			 */
			// 获取session，如果使用JSESSIONID没有找到则创建一个
			HttpSession session = request.getSession();
			// 获取session中属性名为car的对象
			Cart car = (Cart) session.getAttribute("car");
			// 获取session中属性名为user的对象
			User user = (User) session.getAttribute("user");

			// 如果user对象为空，则表示还没登录，要求用户登录后才能进行操作
			if (user == null) {
				out.println("还没登录。<a href='/login.html'>请登录</a>");
				return;
			}

			out.println("<b>" + user.getUserName() + "</b> 的购物车<br/>");

			// 如果car对象为空，表示还没创建购物车，如果不为空，就表示有购物车，可以依次输出其内容
			if (car != null) {
				for (CarItem carItem : car.list()) {
					out.println("商品：" + carItem.getProduct() + " 数量："
							+ carItem.getNumber() + " <a href='/delete?id="
							+ carItem.getId() + "'>删除</a>");
					out.println("<hr>");
				}
			} else {
				out.println("还没购物车，所以没内容");
			}

		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
